package br.sddp.controle;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import br.sddp.dao.UsuarioDAO;
import br.sddp.modelo.Usuario;
import br.sddp.util.Criptografia;
import br.sddp.util.WebUtil;

@SessionScoped
@ManagedBean
public class LoginBean {

	private Usuario usuario = new Usuario();

	UsuarioDAO dao = new UsuarioDAO();

	/**
	 * Metodo responsavel por criar a autenticacao e sessao.
	 * 
	 * @return retorna para index em caso de sucesso
	 */
	public void autenticar() {

		String login = this.getUsuario().getLogin();
		String senha = Criptografia.encodePassword(this.getUsuario().getSenha());
		String redirecionar;

		FacesContext fc = FacesContext.getCurrentInstance();

		Usuario usuarioAutenticado = dao.autenticar(login, senha);

		if(usuarioAutenticado.getIdUsuario() != null) {

			ExternalContext ec = fc.getExternalContext();
			HttpSession session = (HttpSession) ec.getSession(true);
			session.setAttribute("usuario", usuarioAutenticado.getLogin());
			session.setAttribute("perfil", usuarioAutenticado.getPerfil());
			session.setAttribute("id", usuarioAutenticado.getIdUsuario());

			redirecionar = "index.xhtml";
		}
		else {
			WebUtil.enviarMsgErro("Usuário e/ou senha inválidos");
			redirecionar = "login.xhtml";
		}

		//Redireciona
		WebUtil.redirecionar(redirecionar);
	}

	/**
	 * Metodo responsavel pelo logout do usuário.
	 * 
	 * @return
	 */
	public void logout() {

		FacesContext fc = FacesContext.getCurrentInstance();
		ExternalContext ec = fc.getExternalContext();
		HttpSession session = (HttpSession) ec.getSession(false);
		session.removeAttribute("usuario");
		session.removeAttribute("perfil");
		session.invalidate();

		//Efetua redirecionamento
		WebUtil.redirecionar("login.xhtml");
	}

	/*METODOS MODIFICADORES*/
	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}	
}
